package com.doctor.windflower_doctor.http.request;

import java.io.File;
import java.io.InputStream;
import java.util.List;

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;

import com.doctor.windflower_doctor.http.callback.HttpRequestCallBack;
import com.lidroid.xutils.http.RequestParams;
import com.lidroid.xutils.http.RequestParams.HeaderItem;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;

/**
 * <p>
 * 功能 网络请求参数类
 * </p>
 * 
 * <p>
 * Copyright 北京亚普拓信息咨询服务有限公司 2014 All right reserved.
 * </p>
 * 
 * @author 皮勉 时间 2014年10月8日 下午5:18:01
 * @version 1.0 </br> 最后修改人 无
 * 
 */
public class HttpRequestParams {

	private final RequestParams mRequestParams;
	private final HttpMethod mRequestMethod;
	private final String mRequestUrl;
	private final HttpRequestCallBack<?> mRequestCallBack;
	private final int mRequestTimeOut;

	/**
	 * <p>
	 * 描述 网络请求参数类
	 * </p>
	 * 
	 * @param requestMethod
	 *            网络请求方式
	 * @param requestUrl
	 *            网络请求路径
	 * @param requestCallBack
	 *            网络请求回调
	 * @param charSet
	 *            字符集
	 * @param requestTimeOut
	 *            超时时间， 小于4s用默认的15s 单位ms
	 */
	public HttpRequestParams(HttpMethod requestMethod, String requestUrl, HttpRequestCallBack<?> requestCallBack, String charSet, int requestTimeOut) {
		mRequestMethod = requestMethod;
		mRequestUrl = requestUrl;
		mRequestCallBack = requestCallBack;
		mRequestParams = new RequestParams(charSet);
		mRequestTimeOut = requestTimeOut;
	}

	/**
	 * 
	 * <p>
	 * 描述 网络请求参数类
	 * </p>
	 * 
	 * @param requestMethod
	 *            网络请求方式
	 * @param requestUrl
	 *            网络请求路径
	 * @param requestCallBack
	 *            网络请求回调
	 * @param charSet
	 *            字符集
	 */
	public HttpRequestParams(HttpMethod requestMethod, String requestUrl, HttpRequestCallBack<?> requestCallBack, String charSet) {
		this(requestMethod, requestUrl, requestCallBack, charSet, 0);
	}

	/**
	 * 
	 * <p>
	 * 描述
	 * </p>
	 * 
	 * @param requestMethod
	 * @param requestUrl
	 * @param requestCallBack
	 */
	public HttpRequestParams(HttpMethod requestMethod, String requestUrl, HttpRequestCallBack<?> requestCallBack) {
		this(requestMethod, requestUrl, requestCallBack, null, 0);
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:21:03
	 * @return
	 */
	public RequestParams getRequestParams() {
		return mRequestParams;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:21:11
	 * @return
	 */
	public HttpMethod getRequestMethod() {
		return mRequestMethod;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:21:24
	 * @return
	 */
	public String getRequestUrl() {
		return mRequestUrl;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:21:32
	 * @return
	 */
	public int getRequestTimeOut() {
		return mRequestTimeOut;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:21:42
	 * @return
	 */
	public HttpRequestCallBack<?> getmRequestCallBack() {
		return mRequestCallBack;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:21:48
	 * @return
	 */
	public String getCharset() {
		return mRequestParams.getCharset();
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:21:56
	 * @param contentType
	 * @return
	 */
	public HttpRequestParams setContentType(String contentType) {
		mRequestParams.setContentType(contentType);
		return this;
	}

	/**
	 * Adds a header to this message. The header will be appended to the end of
	 * the list.
	 * 
	 * @param header
	 */
	public HttpRequestParams addHeader(Header header) {
		mRequestParams.addHeader(header);
		return this;
	}

	/**
	 * Adds a header to this message. The header will be appended to the end of
	 * the list.
	 * 
	 * @param name
	 * @param value
	 */
	public HttpRequestParams addHeader(String name, String value) {
		mRequestParams.addHeader(name, value);
		return this;
	}

	/**
	 * Adds all the headers to this message.
	 * 
	 * @param headers
	 */
	public HttpRequestParams addHeaders(List<Header> headers) {
		mRequestParams.addHeaders(headers);
		return this;
	}

	/**
	 * Overwrites the first header with the same name. The new header will be
	 * appended to the end of the list, if no header with the given name can be
	 * found.
	 * 
	 * @param header
	 */
	public HttpRequestParams setHeader(Header header) {
		mRequestParams.setHeader(header);
		return this;
	}

	/**
	 * Overwrites the first header with the same name. The new header will be
	 * appended to the end of the list, if no header with the given name can be
	 * found.
	 * 
	 * @param name
	 * @param value
	 */
	public HttpRequestParams setHeader(String name, String value) {
		mRequestParams.setHeader(name, value);
		return this;
	}

	/**
	 * Overwrites all the headers in the message.
	 * 
	 * @param headers
	 */
	public HttpRequestParams setHeaders(List<Header> headers) {
		mRequestParams.setHeaders(headers);
		return this;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:22:07
	 * @param name
	 * @param value
	 * @return
	 */
	public HttpRequestParams addQueryStringParameter(String name, String value) {
		mRequestParams.addQueryStringParameter(name, value);
		return this;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:22:15
	 * @param nameValuePair
	 * @return
	 */
	public HttpRequestParams addQueryStringParameter(NameValuePair nameValuePair) {
		mRequestParams.addQueryStringParameter(nameValuePair);
		return this;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:22:21
	 * @param nameValuePairs
	 * @return
	 */
	public HttpRequestParams addQueryStringParameter(List<NameValuePair> nameValuePairs) {
		mRequestParams.addQueryStringParameter(nameValuePairs);
		return this;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:22:28
	 * @param name
	 * @param value
	 * @return
	 */
	public HttpRequestParams addBodyParameter(String name, String value) {
		mRequestParams.addBodyParameter(name, value);
		return this;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:22:35
	 * @param nameValuePair
	 * @return
	 */
	public HttpRequestParams addBodyParameter(NameValuePair nameValuePair) {
		mRequestParams.addBodyParameter(nameValuePair);
		return this;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:22:41
	 * @param nameValuePairs
	 * @return
	 */
	public HttpRequestParams addBodyParameter(List<NameValuePair> nameValuePairs) {
		mRequestParams.addBodyParameter(nameValuePairs);
		return this;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:22:48
	 * @param key
	 * @param file
	 * @return
	 */
	public HttpRequestParams addBodyParameter(String key, File file) {
		mRequestParams.addBodyParameter(key, file);
		return this;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:22:55
	 * @param key
	 * @param file
	 * @param mimeType
	 * @return
	 */
	public HttpRequestParams addBodyParameter(String key, File file, String mimeType) {
		mRequestParams.addBodyParameter(key, file, mimeType);
		return this;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:23:04
	 * @param key
	 * @param file
	 * @param mimeType
	 * @param charset
	 * @return
	 */
	public HttpRequestParams addBodyParameter(String key, File file, String mimeType, String charset) {
		mRequestParams.addBodyParameter(key, file, mimeType, charset);
		return this;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:23:13
	 * @param key
	 * @param stream
	 * @param length
	 * @param fileName
	 * @return
	 */
	public HttpRequestParams addBodyParameter(String key, InputStream stream, long length, String fileName) {
		mRequestParams.addBodyParameter(key, stream, length, fileName);
		return this;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:23:20
	 * @param key
	 * @param stream
	 * @param length
	 * @param mimeType
	 * @param fileName
	 * @return
	 */
	public HttpRequestParams addBodyParameter(String key, InputStream stream, long length, String mimeType, String fileName) {
		mRequestParams.addBodyParameter(key, stream, length, mimeType, fileName);
		return this;
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:23:34
	 * @param bodyEntity
	 * @return
	 */
	public HttpRequestParams setBodyEntity(HttpEntity bodyEntity) {
		mRequestParams.setBodyEntity(bodyEntity);
		return this;
	}

	/**
	 * Returns an HttpEntity containing all request parameters
	 */
	public HttpEntity getEntity() {
		return mRequestParams.getEntity();
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:23:40
	 * @return
	 */
	public List<NameValuePair> getQueryStringParams() {
		return mRequestParams.getQueryStringParams();
	}

	/**
	 * <p>
	 * 功能
	 * </p>
	 * 
	 * @author 皮勉 时间 2014年10月8日 下午5:23:47
	 * @return
	 */
	public List<HeaderItem> getHeaders() {
		return mRequestParams.getHeaders();
	}

}
